SET QUOTED_IDENTIFIER ON
GO
SET ANSI_NULLS OFF
GO
CREATE PROCEDURE [dbo].[paAsignarOrganizacionParaSalarioFamiliar] 
@CabeceraDeLiquidacion INT
AS
SET NOCOUNT ON
DECLARE @ErrorX INT
DECLARE @Agente INT
DECLARE @NuevaOrganizacion INT

SELECT @ErrorX = 0

-- Agentes que tienen que cobrar asignacion familiar y no tienen concepto de liquidacion por organizacion 12.
DECLARE Agentes CURSOR FOR
SELECT IdAgente From tb_Agentes A
WHERE EXISTS(SELECT * FROM tb_ServiciosAgentes S INNER JOIN tb_Organizaciones O on IdOrganizaciones = ubicacionorig WHERE O.EsPrivada = 'S' and S.FechaBaja IS NULL AND A.IdAgente = S.Agente)
AND NOT EXISTS(SELECT * FROM tb_ServiciosAgentes S INNER JOIN tb_Organizaciones O on IdOrganizaciones = ubicacionorig WHERE (O.EsPrivada is null or O.EsPrivada = 'N') and S.FechaBaja is null and A.IdAgente = S.Agente) 
AND ( EXISTS(SELECT * FROM tb_FamiliaresACargo F WHERE A.idAgente = F.idAgente AND CorrespondeAsignacionFamiliar = 'S') OR
	 EXISTS(SELECT * FROM tb_CertificadosConceptosLiquidacion WHERE Agente = A.IdAgente AND Habilitado = 'S') )
AND NOT EXISTS(SELECT * FROM tb_ConceptosDelAgentePorOrganizacion WHERE Agente = Idagente AND Concepto = 12)

OPEN Agentes

FETCH NEXT FROM Agentes INTO @Agente
		
WHILE @@FETCH_STATUS = 0
BEGIN
	
	--Se busca la nueva organizacion donde cobrar con la fecha mas antigua del servicio
	SELECT @NuevaOrganizacion = MIN(UbicacionOrig) FROM tb_ServiciosAgentes S
	INNER JOIN tb_Organizaciones O ON IdOrganizaciones = UbicacionOrig
	INNER JOIN tb_SubServiciosAgentes SS ON S.IdServicioAgente = SS.ServicioAgente
	WHERE Agente = @Agente 
	AND EsPrivada = 'S'		
	AND SS.FechaBaja IS NULL
	AND S.FechaAlta = (SELECT MIN(FechaAlta) FROM tb_ServiciosAgentes S INNER JOIN tb_Organizaciones O ON UbicacionOrig = IdOrganizaciones WHERE EsPrivada = 'S' AND S.FechaBaja IS NULL AND Agente = @Agente)
	
	-- Nueva Organizacion para cobrar SALARIO FAMILIAR Y ESTIMULOS
	IF @NuevaOrganizacion IS NOT NULL
	BEGIN
		INSERT INTO tb_ConceptosDelAgentePorOrganizacion (Agente, Organizacion, Concepto) VALUES (@Agente, @NuevaOrganizacion, 12)
		SELECT @ErrorX = @@ERROR
		IF @ErrorX <> 0 
			INSERT tb_ErroresLiquidacion SELECT NULL Liquidacion, @Agente, NULL Organizacion, NULL Servicio, NULL Concepto, GETDATE() Fecha, 'No se pudo cargar la Organizacion para liquidar el Salario Familiar' Diagnostico, @CabeceraDeLiquidacion, @ErrorX
	END

	FETCH NEXT FROM Agentes INTO @Agente
END

CLOSE Agentes
DEALLOCATE Agentes
GO
